From c3eafed4728612668558b0470ddd6cd1fa534733 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 28 May 2020 15:09:02 +0100 Subject: [PATCH] a11y: Simplify GtkColorSwatchAccessible Drop the GtkWidgetAccessible.notify_gtk override. --- gtk/a11y/gtkcolorswatchaccessible.c | 65 +++++++++++++++-------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/gtk/a11y/gtkcolorswatchaccessible.c b/gtk/a11y/gtkcolorswatchaccessible.c index 5e60d2040e..1c52fda18c 100644 --- a/gtk/a11y/gtkcolorswatchaccessible.c +++ b/gtk/a11y/gtkcolorswatchaccessible.c @@ -17,10 +17,10 @@ #include "config.h" -#include -#include -#include "gtkcolorswatchprivate.h" #include "gtkcolorswatchaccessibleprivate.h" +#include "gtkcolorswatchprivate.h" + +#include static void atk_action_interface_init (AtkActionIface *iface); @@ -29,9 +29,9 @@ G_DEFINE_TYPE_WITH_CODE (GtkColorSwatchAccessible, _gtk_color_swatch_accessible, static void state_changed_cb (GtkWidget *widget, - GtkStateFlags previous_flags) + GtkStateFlags previous_flags, + AtkObject *accessible) { - AtkObject *accessible; GtkStateFlags flags; gboolean was_selected; gboolean selected; @@ -41,23 +41,46 @@ state_changed_cb (GtkWidget *widget, was_selected = (previous_flags & GTK_STATE_FLAG_SELECTED) != 0; selected = (flags & GTK_STATE_FLAG_SELECTED) != 0; - accessible = gtk_widget_get_accessible (widget); if (selected && !was_selected) atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, TRUE); else if (!selected && was_selected) atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, FALSE); } +static void +on_selectable_changed_cb (GObject *gobject, + GParamSpec *pspec, + AtkObject *accessible) +{ + GtkColorSwatch *swatch = GTK_COLOR_SWATCH (gobject); + AtkRole role; + + if (gtk_color_swatch_get_selectable (swatch)) + role = ATK_ROLE_RADIO_BUTTON; + else + role = ATK_ROLE_PUSH_BUTTON; + + atk_object_set_role (accessible, role); +} + static void gtk_color_swatch_accessible_initialize (AtkObject *obj, gpointer data) { + GtkColorSwatch *swatch = data; + ATK_OBJECT_CLASS (_gtk_color_swatch_accessible_parent_class)->initialize (obj, data); g_signal_connect (data, "state-flags-changed", - G_CALLBACK (state_changed_cb), NULL); - - atk_object_set_role (obj, ATK_ROLE_RADIO_BUTTON); + G_CALLBACK (state_changed_cb), + obj); + g_signal_connect (data, "notify::selectable", + G_CALLBACK (on_selectable_changed_cb), + obj); + + obj->role = gtk_color_swatch_get_selectable (swatch) + ? ATK_ROLE_RADIO_BUTTON + : ATK_ROLE_PUSH_BUTTON; } static AtkStateSet * @@ -78,39 +101,19 @@ gtk_color_swatch_accessible_ref_state_set (AtkObject *accessible) return state_set; } -static void -gtk_color_swatch_accessible_notify_gtk (GObject *obj, - GParamSpec *pspec) -{ - GtkWidget *widget = GTK_WIDGET (obj); - AtkObject *atk_obj = gtk_widget_get_accessible (widget); - - if (strcmp (pspec->name, "selectable") == 0) - { - if (gtk_color_swatch_get_selectable (GTK_COLOR_SWATCH (widget))) - atk_object_set_role (atk_obj, ATK_ROLE_RADIO_BUTTON); - else - atk_object_set_role (atk_obj, ATK_ROLE_PUSH_BUTTON); - } - else - GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_color_swatch_accessible_parent_class)->notify_gtk (obj, pspec); -} - static void _gtk_color_swatch_accessible_class_init (GtkColorSwatchAccessibleClass *klass) { AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); - GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass *)klass; atk_class->initialize = gtk_color_swatch_accessible_initialize; atk_class->ref_state_set = gtk_color_swatch_accessible_ref_state_set; - - widget_class->notify_gtk = gtk_color_swatch_accessible_notify_gtk; } static void -_gtk_color_swatch_accessible_init (GtkColorSwatchAccessible *scale) +_gtk_color_swatch_accessible_init (GtkColorSwatchAccessible *self) { + ATK_OBJECT (self)->role = ATK_ROLE_RADIO_BUTTON; } static gint -- 2.30.2